package constant.milk.periodapp.util;

import java.util.ArrayList;
import java.util.Calendar;

import constant.milk.periodapp.bean.SengriData;
import constant.milk.periodapp.database.DBSelectQuery;
import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;

public class MilkUtil
{
	/**
	 * 토스트 출력
	 * @param msg 메세지
	 * @param length length
	 */
	public static void showToast(Context context, String msg)
	{
		Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
	}
	
	/**
	 * 검색 리스트 데이터 두개를 비교해서 중복 값을 체크한다.
	 * @param orgList 
	 * @param selectList
	 * @return
	 */
	public static boolean getListOverlapCheck(ArrayList<String> orgList, ArrayList<String> selectList)
	{
		for (int i = 0; i < selectList.size(); i++)
		{
			String selectData = selectList.get(i);
			
			for (int j = 0; j < orgList.size(); j++)
			{
				String orgData = orgList.get(j);
				
				if (selectData.equals(orgData))
				{
					return true;
				}
			}
		}
		
		return false;
	}
	
	
	/**
	 * dip 를 pixel로 변환한다. 모든 스크린에서 사용자에게 동일한 크기로 보여지게 하기 위해서 사용한다.
	 * @param context
	 * @param pixel
	 * @return
	 */
	public static int dipToPixel(Context context, float dip)
	{
		DisplayMetrics metrics = new DisplayMetrics();
		((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(metrics);
		int densityDpi = metrics.densityDpi;
		return (int)(dip * ((float)densityDpi/(float)160));
	}
	
	/**
	 * 키보드를 강제로 내린다.	
	 */
	public static void hideKeyBoard(Context context, EditText editText)
	{
		InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
		if(editText != null)
			imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
	}
	
	/**
	 * 문자 열에 들어간 어퍼스트로피를 쿼리에서 사용 가능하게 '' 로 변경한다.
	 * @param string
	 * @return
	 */
	public static String getApostrophe(String string)
	{
		string = string.replace("'", "''");
		
		return string;
	}
	
	/**
	 * 날짜 데이터 포맷을 반환하는 메소드 (형태 : YYYY. MM.)
	 * @param year 년도
	 * @param month 월
	 * @return 전체 날짜
	 */
	public static String getDate(int year, int month)
	{
		String m = "" + (month);
		
		if (month < 10)
		{
			m = "0" + (month);
		}
		
		return year + ". " + m;
	}
	
	/**
	 * 날짜 데이터 포맷을 반환하는 메소드 (형태 : MM. DD)
	 * @param month 월
	 * @param day 일
	 * @return 전체 날짜
	 */
	public static String getMonthDay(int month, int day)
	{
		String m = "" + (month);
		
		if (month < 10)
		{
			m = "0" + (month);
		}
		
		String d = "" + (day);
		
		if (day < 10)
		{
			d = "0" + (day);
		}
		
		return m + ". " + d;
	}
	
	/**
	 * 10 미만의 숫자를 0을 붙여서 리턴한다.
	 * @param date
	 * @return
	 */
	public static String getDateStr(int date)
	{
		String str = "";
		
		if (date < 10)
		{
			str = "0" + date;
		}
		else
		{
			str = date + "";
		}
		
		return str;
	}
	
	/**
	 * 날짜 데이터 포맷을 반환하는 메소드 (형태 : YYYY. MM. DD)
	 * @param year 년도
	 * @param month 월
	 * @param day 일
	 * @return 전체 날짜
	 */
	public static String getDateCom(int year, int month, int day)
	{
		String m = "" + (month);
		String d = "" + day;
		
		if (month < 10)
		{
			m = "0" + (month);
		}
		
		if (day < 10)
		{
			d = "0" + day;
		}
		
		return year + ". " + m + ". " + d;
	}
	
	/**
	 * 날짜를 DB에 들어가는 YYYYMMDD 형태로 반환한다.
	 * @param year
	 * @param month
	 * @param day
	 * @return
	 */
	public static String getDateDB(int year, int month, int day)
	{
		String m = "" + (month);
		String d = "" + day;
		
		if (month < 10)
		{
			m = "0" + (month);
		}
		
		if (day < 10)
		{
			d = "0" + day;
		}
		
		return year + m + d;
	}
	
	public static int getAveSengriTerm(Context context, DBSelectQuery select)
	{
		ArrayList<SengriData> allList = select.getSengriList();
		
		if (allList.size() > 1)
		{
			long millSum = 0;
			
			for (int i = 1; i < allList.size(); i++)
			{
				SengriData data1 = allList.get(i-1);
				Calendar cal1 = Calendar.getInstance();
				cal1.setTimeInMillis(0);
				cal1.set(data1.getYear(), data1.getMonth(), data1.getDay());
				long mill1 = cal1.getTimeInMillis();
				
				SengriData data2 = allList.get(i);
				Calendar cal2 = Calendar.getInstance();
				cal2.setTimeInMillis(0);
				cal2.set(data2.getYear(), data2.getMonth(), data2.getDay());
				long mill2 = cal2.getTimeInMillis();
				
				millSum = millSum + (mill1 - mill2);
			}
			
			int size = allList.size()-1;
			long ave = millSum / size;
			
			int date = (int) (ave / (24 * 60 * 60 * 1000));
			
			return date;
		}
		else
		{
			MilkShared s = new MilkShared(context);
			return s.getSengriTerm();
		}
	}
	
	/**
	 * 요일을 반환 하는 메소드
	 * @param week 요일정수
	 * @return 요일
	 */
	public static String getWeekDay(int week)
    {
    	String weekDay = "";
    	
    	switch (week)
		{
			case 1:
				weekDay = "일";
				break;
			case 2:
				weekDay = "월";
				break;
			case 3:
				weekDay = "화";
				break;
			case 4:
				weekDay = "수";
				break;
			case 5:
				weekDay = "목";
				break;
			case 6:
				weekDay = "금";
				break;
			case 7:
				weekDay = "토";
				break;
		}
    	
    	return weekDay;
    }
	
	public static String getTextColorSelect(String color)
	{
		String textColor = "#000000";
		
//		아쿠아마린 9AC1D2
//		스쿠버블루 0EA9BE
//		클래식블루 1E4B83
//		루시트그린 7AC6AF
//		마살라  914F4F
//		글레시어 그레이 E1E3E3
//		토스티드 아몬드 CFB099
//		커스터드 E4D48A
//		탠저린 EC8E56
//		스트로베리 아이스 D9818B
//		생리일 F3A9AA
//		가임일 2EA7E0
//		배란일 009944
//		관계일 F8E183
//		메모 B0AFD7
		
		if (color.equals("#9ac1d2"))
			textColor = "#000000";
		else if (color.equals("#0ea9be"))
			textColor = "#ffffff";
		else if (color.equals("#1e4b83"))
			textColor = "#ffffff";
		else if (color.equals("#7ac6af"))
			textColor = "#000000";
		else if (color.equals("#914f4f"))
			textColor = "#ffffff";
		else if (color.equals("#e1e3e3"))
			textColor = "#000000";
		else if (color.equals("#cfb099"))
			textColor = "#000000";
		else if (color.equals("#ea3556"))
			textColor = "#ffffff";
		else if (color.equals("#ec8e56"))
			textColor = "#000000";
		else if (color.equals("#d9818b"))
			textColor = "#000000";
		else if (color.equals("#f3a9aa"))
			textColor = "#000000";
		else if (color.equals("#2ea7e0"))
			textColor = "#000000";
		else if (color.equals("#009944"))
			textColor = "#ffffff";
		else if (color.equals("#f8e183"))
			textColor = "#000000";
		else if (color.equals("#b0afd7"))
			textColor = "#000000";
		
		return textColor;
	}
	
	public static String getTextColorLine(String color)
	{
		String textColor = "#000000";
		
//		파스텔블루 b8e1ef
//		청녹 13b3a9
//		겨자 f3b92f
//		살구 e59890
//		인디핑크 e3cbc9
//		개나리색 f4dd98
//		라일락 cfb7d6
//		쑥색 a1bba2
//		형광녹색 70e851
//		회색 c4caca
		
		if (color.equals("#b8e1ef"))
			textColor = "#000000";
		else if (color.equals("#13b3a9"))
			textColor = "#ffffff";
		else if (color.equals("#f3b92f"))
			textColor = "#ffffff";
		else if (color.equals("#e59890"))
			textColor = "#ffffff";
		else if (color.equals("#e3cbc9"))
			textColor = "#000000";
		else if (color.equals("#f4dd98"))
			textColor = "#000000";
		else if (color.equals("#cfb7d6"))
			textColor = "#000000";
		else if (color.equals("#a1bba2"))
			textColor = "#000000";
		else if (color.equals("#bacadb"))
			textColor = "#ffffff";
		else if (color.equals("#c4caca"))
			textColor = "#000000";
		
		return textColor;
	}
}
